Medium
In this problem, a tree is an undirected graph that is connected and has noycles.
The given input is a graph that started as a tree with N nodes (with distinct values 1, 2, …, N), with one additional edge added. The added edge has two different vertices chosen from 1 to N, and was not an edge that already existed.
The resulting graph is given as a 2D-array of edges
. Each element of edges
is a pair [u, v]
with u < v
, that represents an undirected edge connecting nodes u
and v
.
Return an edge that can be removed so that the resulting graph is a tree of N nodes. If there are multiple answers, return the answer that occurs last in the given 2D-array. The answer edge [u, v]
should be in the same format, with u < v
.
Example 1:
1 | Input: [[1,2], [1,3], [2,3]] |
Example 2:
1 | Input: [[1,2], [2,3], [3,4], [1,4], [1,5]] |
Note:
The size of the input 2D-array will be between 3 and 1000.
Every integer represented in the 2D-array will be between 1 and N, where N is the size of the input array.
Update (2017-09-26):
We have overhauled the problem description + test cases and specified clearly the graph is an undirected\ graph. For the directed\ graph follow up please see Redundant Connection II). We apologize for any inconvenience caused.
如何去掉多余的一条边,把图变成树,那就是去掉环里的一条边。然后由于有多种答案,我们需要去掉list里最靠后的边,所以我们不如在遍历的时候就开始记录边的关系,当发现加入这条边后能构成一个环,就return这条边。那么如何确定能构成环呢?比如[1,2], [2,3], [1,3],我们发现[1,3]这条边的两个端点都在同一个线段集([1,2], [2,3])里,那我们不如就使用查并集,这样当两条边能够连接在一起时(有一个端点一样)那我们就把他们归为一组。每次加入新边时,就查找端点u,v是否在同一组,不在说明他们构不成环,在说明他们能构成环。
- Union-Found
1 | class UnionFound: |
改良版:
1 | class Solution: |